/*
由键盘输入若干个整数，判断是几个，并逆序输出，要求用线性表的链式存储结构实现！！！ 

Input 
输入若干个整数 
Output 
输出为两行，第一行为整数的个数，第二行为整数的逆序序列，每一行末尾都有空格和换行！！！

*/

/*
#include <stdio.h>
#include <stdlib.h>

// 定义链表节点结构体
typedef struct Node {
    int data;
    struct Node *next;
} Node;

// 创建新节点
Node *createNode(int value) {
    Node *newNode = (Node *)malloc(sizeof(Node));
    newNode->data = value;
    newNode->next = NULL;
    return newNode;
}

// 逆序打印链表
void printReverse(Node *head) {
    if (head == NULL) {
        return;
    }
    printReverse(head->next);
    printf("%d ", head->data);
}

// 处理输入整数并构建链表等相关操作
void processList() {
    Node *head = NULL;
    Node *tail = NULL;
    int num;
    int count = 0;

    printf("请输入整数，按回车键结束输入：\n");
    // 使用getchar获取字符，判断是否为换行符来结束输入
    while ((num = getchar())!= '\n') {
        // 将获取到的字符转换回整数（这里假设输入的是合法的数字字符）
        ungetc(num, stdin);
        scanf("%d", &num);
        Node *newNode = createNode(num);
        if (head == NULL) {
            head = newNode;
            tail = newNode;
        } else {
            tail->next = newNode;
            tail = newNode;
        }
        count++;
    }

    printf("%d\n", count);
    printReverse(head);
    printf("\n");

    // 释放链表内存
    Node *current = head;
    Node *temp;
    while (current!= NULL) {
        temp = current;
        current = current->next;
        free(temp);
    }
}

int main() {
    processList();
    return 0;
}

*/

#include <stdio.h>
#include <stdlib.h>

// 定义链表节点结构体
typedef struct Node {
    int data;
    struct Node *next;
} Node;

// 创建新节点
Node *createNode(int value) {
    Node *newNode = (Node *)malloc(sizeof(Node));
    newNode->data = value;
    newNode->next = NULL;
    return newNode;
}

// 逆序打印链表（使用迭代）
void printReverse(Node *head) {
    Node *stack[100];  // 假设链表长度不超过 100
    int top = -1;

    Node *curr = head;
    while (curr) {
        stack[++top] = curr;
        curr = curr->next;
    }

    while (top >= 0) {
        printf("%d ", stack[top]->data);
        top--;
    }
}

// 处理输入整数并构建链表等相关操作
void processList() {
    Node *head = NULL;
    Node *tail = NULL;
    int num;
    int count = 0;

    printf("请输入整数，按回车键结束输入：\n");
    // 使用缓冲区存储输入数据
    char buffer[20];
    fgets(buffer, sizeof(buffer), stdin);

    char *ptr = buffer;
    while (*ptr!= '\n') {
        int num;
        sscanf(ptr, "%d", &num);

        Node *newNode = createNode(num);
        if (head == NULL) {
            head = newNode;
            tail = newNode;
        } else {
            tail->next = newNode;
            tail = newNode;
        }
        count++;

        // 移动指针到下一个数字
        while (*ptr!= ' ' && *ptr!= '\n') {
            ptr++;
        }
        if (*ptr == ' ') {
            ptr++;
        }
    }

    printf("%d \n", count);
    printReverse(head);
    printf("\n");

    // 释放链表内存
    Node *current = head;
    Node *temp;
    while (current!= NULL) {
        temp = current;
        current = current->next;
        free(temp);
    }
}

int main() {
    processList();
    return 0;
}